// 7. 对象结构：文档
/// <summary>
/// 文档类（访问者模式中的ObjectStructure）
/// 维护文档元素的集合，并允许访问者访问这些元素
/// </summary>
public class Document
{
  /// <summary>
  /// 文档元素集合
  /// </summary>
  private readonly List<DocumentElement> _elements = new();

  /// <summary>
  /// 向文档添加元素
  /// </summary>
  /// <param name="element">文档元素</param>
  public void Add(DocumentElement element) => _elements.Add(element);

  /// <summary>
  /// 接受访问者对所有元素的访问
  /// </summary>
  /// <param name="visitor">访问者对象</param>
  public void Accept(IDocumentVisitor visitor)
  {
    foreach (var element in _elements)
    {
      element.Accept(visitor); // 遍历并访问每个元素
    }
  }
}